package com.ruoyi.vehicles.service;

import java.util.List;
import java.util.Set;

import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.domain.SysVechicleDto;
import com.ruoyi.system.api.domain.SysVehicles;
import com.ruoyi.system.api.domain.UpdateUseUnitDTO;
import com.ruoyi.vehicles.domain.AVehicles;
import com.ruoyi.vehicles.param.AddVehiclesParam;
import com.ruoyi.vehicles.param.UpdateVehiclesParam;

/**
 * 车辆Service接口
 *
 * @author ruoyi
 * @date 2025-04-07
 */
public interface IAVehiclesService
{
    /**
     * 查询车辆
     *
     * @param id 车辆主键
     * @return 车辆
     */
    public AVehicles selectAVehiclesById(Long id);

    /**
     * 查询车辆列表
     *
     * @param aVehicles 车辆
     * @return 车辆集合
     */
    public List<AVehicles> selectAVehiclesList(AVehicles aVehicles);

    /**
     * 新增车辆
     *
     * @param param 车辆信息
     * @param sysUser 当前登录用户信息
     * @return 结果
     */
    public int insertAVehicles(AddVehiclesParam param, SysUser sysUser);

    /**
     * 修改车辆
     *
     * @param param 车辆
     * @return 结果
     */
    public int updateAVehicles(UpdateVehiclesParam param);

    /**
     * 批量删除车辆
     *
     * @param ids 需要删除的车辆主键集合
     * @return 结果
     */
    public int deleteAVehiclesByIds(Long[] ids);

    /**
     * 删除车辆信息
     *
     * @param id 车辆主键
     * @return 结果
     */
    public int deleteAVehiclesById(Long id);

    /**
     * 内部接口修改车辆状态为
     *
     * @param sysVehicles 车辆
     * @return 结果
     */
    public int updateVehiclesStatus(Set<SysVehicles> sysVehicles);

    /**
     * 查询车辆列表
     * @param aVehicles 车辆
     * @param sysUser 当前登录用户信息
     * @return 车辆集合
     */
    List<AVehicles> selectAVehiclesListDept(AVehicles aVehicles, SysUser sysUser);


    Set<SysVechicleDto> selectVehicles(Set<SysVehicles> sysVehicles);

    int updateVehiclesUseUnit(UpdateUseUnitDTO updateUseUnitDTO);

    List<AVehicles> selectDispatchableAVehiclesList(AVehicles aVehicles);

    int removeUseUnit(Set<SysVehicles> sysVehicles);

    List<AVehicles> selectAvailableAVehiclesList(AVehicles aVehicles, Long deptId);
}
